/*
 * @Author: your name
 * @Date: 2021-08-03 15:32:19
 * @LastEditTime: 2021-08-09 11:05:53
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \Self\hrsaas-86\src\utils\request.js
 */
import axios from 'axios'
import store from '@/store'
import { Message } from 'element-ui'
import router from '@/router'

// create an axios 实例
const service = axios.create({
  // process.env判断是项目运行在哪种环境下,对应的会加载对应的环境变量
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})
export default service // 导出axios实例
// 请求拦截器
service.interceptors.request.use(
  function(config) {
    // console.log(config) // 请求的配置对象, 这个配置对象中有一个headers字段
    const token = store.getters.token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    // console.log(config)
    return config
  },
  function(error) {
    console.log(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  // 响应拦截器只要正确的都会经过函数一
  res => {
    // 解构赋值
    const { success, message } = res.data
    if (success) {
      // 登录成功的消息提示
      // Message.success(message)
      // console.log(res)
    } else {
      //  登录失败的消息提示
      Message.error(message)
      // new Error 是个错误对象  不写也行
      // 利用promise抛出异常 ==> 接收结果那边碰到失败的结果后续跳转代码不会执行
      return Promise.reject(new Error(message))
    }

    return res.data // 扒了一层数据,在页面中使用的时候就可以少点一次data
  },
  error => {
    if (error.response.status === 401 && error.response.data.code === 10002) {
      // 清除token和个人信息()
      store.dispatch('user/Actions_removesome')
      // 跳转到登录页面重新登录
      router.push('/login')
      // 提示信息
      Message.error('登录超时...')
    } else {
      console.log(error)
    }
  }
)
